package dd.prog2.exercises.set07;

import java.util.ArrayList;
import java.util.Iterator;

public class CompositeTank extends Tank{

	private ArrayList<Tank> cTank = new ArrayList<Tank>();
	private Iterator<Tank> iter;
	/*
	 * Iterator ist nur in der Klasse CompositeTank deklariert,
	 * da es keinen Sinn macht Iterator bei einfachen Tanks zu hinzufuegen. 
	 * Ausserdem ist Iterator ein Privatattribut und Benutzer hat keinen Zugriff darauf.  
	 */
	public CompositeTank() {
		this.setType("Composite");
	}

	public void add(Tank t){
		cTank.add(t);
	}

	@Override
	public double calcSurface() {
		double res = 0;
		iter = cTank.iterator();
		while(iter.hasNext()){
			Tank tmp = iter.next();
			res += tmp.calcSurface();
		}
		return res;
	}

	@Override
	public double calcVolume() {
		double res = 0;
		while(iter.hasNext()){
			Tank tmp = iter.next();
			res += tmp.calcVolume();
		}
		return res;
	}

	@Override
	public String toString() {
		String res = "Composite Tank:\n";
		double volTotal = 0;
		double surTotal = 0;
		iter = cTank.iterator();
		while(iter.hasNext()){
			Tank tmp = iter.next();
			volTotal += tmp.calcVolume();
			surTotal += tmp.calcSurface();
			res += tmp.getType()+". Surface: "+df.format(tmp.calcSurface())+". Volume: "+df.format(tmp.calcVolume())+"\n";
		}
		res += "Total: Surface="+df.format(surTotal)+". Volume="+df.format(volTotal);
		return res;
	}

	@Override
	protected CompositeTank clone() throws CloneNotSupportedException {
		CompositeTank t = new CompositeTank();
		iter = cTank.iterator();
		while(iter.hasNext()){
			Tank tmp = iter.next();
			t.add(tmp);
		}
		return t;
	}
	
	public void remove(){
		iter = cTank.iterator();
		iter.next();
		iter.remove();
	}

}
